from Crypto.Util.number import *
from gmpy2 import *
from random import *
from secret import flag

m=bytes_to_long(flag)
assert len(bin(m))-2<500
p=getPrime(1024)
q=getPrime(1024)
d=getPrime(1024)
n=p*q
phi=(p-1)*(q-1)
e1=getrandbits(1024)
e2=getrandbits(1024)
while True:
    try:
        D=invert(e2,phi)
        break
    except:
        e2=getrandbits(1024)
enc=pow(m,D,n)
c1=pow(enc+d,e1,n)
c2=pow(enc+d,e1*2,n)
c3=pow(enc+d,e1*3,n)
c4=pow(enc+2*d,D,n)
c5=pow(d,5,n)


print(f"c1 = {c1}")
print(f"c2 = {c2}")
print(f"c3 = {c3}")
print(f"c4 = {c4}")
print(f"c5 = {c5}")
print(f"e2 = {e2}")


c1 = 8511794785870615579750800091492441307046998035299568323420169069590001078632694875574799467201005072627333510838017441282657647569856176037157402650099098068802431583831881608517865791661380070352957202735263941223785118861830221868021798348544736736485932106036482927822794636396162021508870676835203263682463297059876847408026613568190170184392440149860162074229641651234241939711574260387348554764198216494465950970925432307689773776601095048322390131727481805997256341248274433914988568695473850939018633837963413631932943141808571718538740500979408283884073190175124518665126876806495785597723923219493482824002
c2 = 19101061077568371026291868929865478828142041607513896180286731059195806056558152358916908236381873804799526158324173894045845881184322486718400345063305008910526816796762057409887638666997393650160700526141525539775977396294454069216868506414115217971851490119616763211591408627569908521890452870123169982939041611912250560355181879831134308115936482766108713501860584562632109578986217033228887310423065363572080472120402526815109390121165095788247829341714013042350285134190560147333725665005564682994899826710229063673307827237333993223040847715719986697667622973764971578313270327343952343866709156312052635733228
c3 = 19218309159162674975254504278287607045567766564011349049032118707216921709777461784886952727422951562070154499768796372489482310612568249577562267195961803048916283724459282508556874660425838554415280875912973429441610500737519107837978951318121658484652372456237666849884319801277970228065669722915477942845936761742867380907149964248092020767384956808121781598253247743455688904111601722000956803326811512387876795118003681137857305654901877463621725744205374343181025175303982344427280317378179687134618196567049690289131583315883588845950845809568554035667546153389516119672084376496107619148381538541467138319983
c4 = 2198860691599424357992724416897409916803454367607755039417618992872873107051843732723988723339198189113812729788894676705214814878420224006788638932343924660282496379876624013296279631204882608667072218117457694078679096983385204665148134594245690194841173880271536918865264719023597038528908637468935435655793618308416450800033905609951044480781216789661856573466012272873857606506757012155234481010119879597313450432924134481110493746999545953214269478452702357469622247363870232719165710325199054716705908682254281162175138314857185112491870972071600467457094828050929326670979670816854296215229228594848187811782
c5 = 11363147959573103468061993286557457360495513919824417237722905434714070922001948882791064693885877115804885013340893331304158912754761114762443166692456397613826471169097339232172015664161500747897963844963503489286970822711723766176565394567087904181293069683798812491357864297455892208438638077677755291287849199930501003941908908868078649489445238199362090420936515339054350515162181194299425460208755138269240235977597995797642995777568762272017680998415248839530119974595889154320250918462172906856335830424855724977936097006142663940132558597683867502711825757824433059792405156772844717430707118737920176966622
e2 = 33170048301439142862650680453725391691861368681973856140207820156250866049893218702861786680154434870133517721293918914102583051773714118855533969554236862946764436248987085919806787620569190499934001417735616263936598208461219425989423606947147851968120435512741454920812193314927776616125965610531835974733

